// 开发环境下的配置文件管理
interface Config {
  apiKey: string;
  watchDirectory: string;
}

class ConfigManager {
  // 读取配置
  async getConfig(): Promise<Config> {
    try {
      if (process.env.NODE_ENV === 'development') {
        // 开发环境：优先从public/config.json读取，然后从localStorage读取
        try {
          const response = await fetch('/config.json');
          if (response.ok) {
            const fileConfig = await response.json();
            console.log('从config.json文件读取配置:', fileConfig);
            return fileConfig;
          }
        } catch (fileError) {
          console.log('无法读取config.json文件，尝试从localStorage读取');
        }
        
        // 备用：从localStorage读取
        const savedConfig = localStorage.getItem('picshare-config');
        if (savedConfig) {
          const localConfig = JSON.parse(savedConfig);
          console.log('从localStorage读取配置:', localConfig);
          return localConfig;
        }
      }
    } catch (error) {
      console.log('读取配置失败，使用默认配置');
    }

    // 返回默认配置
    return {
      apiKey: '',
      watchDirectory: ''
    };
  }

  // 保存配置
  async saveConfig(config: Config): Promise<boolean> {
    try {
      if (process.env.NODE_ENV === 'development') {
        console.log('=== saveConfig 调试信息 ===');
        console.log('准备保存的配置:', config);

        // 开发环境：保存到localStorage + 尝试保存到文件
        localStorage.setItem('picshare-config', JSON.stringify(config, null, 2));

        console.log('配置已保存到localStorage:');
        console.log(localStorage.getItem('picshare-config'));
        
        // 简化方案：直接创建一个可保存的文件内容
        const fileContent = JSON.stringify(config, null, 2);
        
        // 创建一个提示，告诉用户如何手动保存
        console.log('=== 请手动保存以下内容到 config.json ===');
        console.log(fileContent);
        console.log('=========================================');
        
        // 显示一个提示框，让用户复制内容
        const userConfirm = confirm(
          '配置已保存到内存。\n\n' +
          '请手动将以下内容保存到项目根目录的 config.json 文件中：\n\n' +
          fileContent + '\n\n' +
          '点击"确定"复制内容到剪贴板，"取消"跳过。'
        );
        
        if (userConfirm) {
          // 复制到剪贴板
          if (navigator.clipboard) {
            await navigator.clipboard.writeText(fileContent);
            console.log('配置内容已复制到剪贴板');
          }
        }
        
        return true;
      }
    } catch (error) {
      console.error('保存配置失败:', error);
    }
    return false;
  }
}

// 创建全局实例
const configManager = new ConfigManager();

// 开发环境下的electronAPI模拟
interface ElectronAPI {
  selectDirectory: () => Promise<string>;
  selectFile: () => Promise<string[]>;
  getConfig: () => Promise<any>;
  saveConfig: (config: any) => Promise<boolean>;
  readdir: (directoryPath: string) => Promise<string[]>;
  stat: (filePath: string) => Promise<any>;
  readFileAsArrayBuffer: (filePath: string) => Promise<ArrayBuffer>;
}

declare global {
  interface Window {
    electronAPI?: ElectronAPI;
  }
}

// 如果在开发环境中，创建模拟API
if (typeof window !== 'undefined' && !window.electronAPI) {
  window.electronAPI = {
    selectDirectory: async () => {
      // 开发环境 - 模拟目录选择
      const mockPath = prompt('开发环境模拟：请输入要监听的目录路径\n\n例如：\n• macOS: /Users/用户名/Pictures\n• Windows: C:\\Users\\用户名\\Pictures\n• Linux: /home/用户名/Pictures', '/Users/username/Pictures');
      return mockPath || '';
    },
    selectFile: async () => {
      // 开发环境 - 模拟多文件选择，返回空数组，后面我们会用input[type=file]替代
      return [];
    },
    getConfig: async () => {
      const config = await configManager.getConfig();
      console.log('开发环境：加载配置', config);
      return config;
    },
    saveConfig: async (config: any) => {
      const success = await configManager.saveConfig(config);
      if (success) {
        console.log('开发环境：配置已保存到localStorage', config);
      }
      return success;
    },
    readdir: async (directoryPath: string) => {
      // 开发环境 - 模拟文件列表读取
      console.log('开发环境模拟：读取目录', directoryPath);
      
      // 模拟一些测试文件
      const mockFiles = [
        'DSC0001.JPG',
        'DSC0002.RAW',
        'DSC0003.JPG',
        'IMG_001.CR2',
        'photo_001.NEF'
      ];
      
      // 随机返回一些文件，模拟新文件出现
      const shouldReturnFiles = Math.random() > 0.7; // 30% 概率返回文件
      return shouldReturnFiles ? mockFiles : [];
    },
    stat: async (filePath: string) => {
      // 开发环境 - 模拟文件状态检查
      console.log('开发环境模拟：检查文件状态', filePath);
      
      // 模拟文件大小（1MB - 50MB）
      const size = Math.floor(Math.random() * 50 * 1024 * 1024) + 1024 * 1024;
      
      return {
        size: size,
        mtime: Date.now(),
        isFile: true,
        isDirectory: false
      };
    },
    readFileAsArrayBuffer: async (filePath: string) => {
      // 开发环境 - 模拟文件读取
      console.log('开发环境模拟：读取文件', filePath);
      
      // 创建模拟的文件内容
      const mockContent = new TextEncoder().encode('mock file content for development');
      return mockContent.buffer;
    }
  };
}

export {};